import NProgress from 'nprogress'; // progress bar
import 'nprogress/nprogress.css'; // progress bar style
import { useAccountStore } from '@/store';
import { updateAppTitle } from '@/soar';
import router from '@/router';

// 获取匿名路由名单
function getAnonRouteMap() {
  const map: any = {};
  const ls = router.getRoutes().filter((x) => x.meta?.anon);
  for (const x of ls) {
    map[x.path] = true;
  }
  return map;
}
const anonRouteMap = getAnonRouteMap();
// 配置进度条
NProgress.configure({ showSpinner: false });

// 权限处理
router.beforeEach((to, from, next) => {
  NProgress.start();
  if (anonRouteMap[to.path]) {
    NProgress.set(0.5);
    // 匿名地址直接访问
    next();
    return;
  }

  const accountStore = useAccountStore();
  // 权限处理（此操作会查询token信息、用户信息、生成动态路由）
  accountStore
    // @ts-ignore
    .isLogin()
    .then((res) => {
      NProgress.set(0.3);
      // 已登录直接访问
      if (res) {
        // 动态添加路由后重新触发路由匹配，解决动态路由刷新404问题
        next(to);
      } else {
        NProgress.set(0.6);
        if (to.path === '/result/404' && accountStore.routes?.length) {
          // 处理404问题
          next({ name: accountStore.routes[0].name });
        } else {
          // 直接进入
          next();
        }
      }
    })
    .catch(() => {
      NProgress.set(0.5);
      // 否则踢到登录页
      next({ path: '/login', query: { redirect: encodeURIComponent(to.fullPath) } });
    });
});

// 路由后置处理
router.afterEach((to) => {
  NProgress.done();
  // @ts-ignore 设置浏览器标题
  updateAppTitle(to.meta?.title);
});
